package com.liuguoqing.richtersubstitution.after;

/**
 * 里氏代换原则：
 *     任何基类可以出现的地方，子类一定可以出现。通俗理解：子类可以扩展父类的功能，但不能改变父类原有的功能。
 * 换句话说，子类继承父类时，除添加新的方法完成新增功能外，尽量不要重写父类的方法。
 *     如果通过重写父类的方法来完成新的功能，这样写起来虽然简单，但是整个继承体系的可复用性会比较差，特别是运用多态
 * 比较频繁时，程序运行出错的概率会非常大。
 *
 * @Author : liugq
 * @Date : 2022/5/12 12:10
 * @See : 参考类
 * @Since： JDK1.8
 * @Version : 1.0
 */
public class RectangleDemo {

    /**
     * 只能给长方形扩容，正方形不允许
     */
    public static void resize(Rectangle rectangle) {
        while (rectangle.getWidth() <= rectangle.getLength())
            rectangle.setWidth(rectangle.getWidth() + 1);
    }

    /**
     * 打印四边形的长、宽
     *
     * @param quadrilateral 参数使用接口
     */
    public static void printWL(Quadrilateral quadrilateral) {
        System.out.println(quadrilateral.getLength());
        System.out.println(quadrilateral.getWidth());
    }

    public static void main(String[] args) {
        //长方形的扩容，正差
        Rectangle rectangle = new Rectangle();
        rectangle.setLength(20);
        rectangle.setWidth(10);
        resize(rectangle);
        printWL(rectangle);

        //正方形，不允许扩容，但可以打印长宽
        Square square = new Square();
        square.setSide(20);
        printWL(square);

    }
}
